package com.atguigu.gmall.product.controller;


import com.atguigu.gmall.common.result.Result;
import com.atguigu.gmall.product.component.MinioService;
import io.minio.MinioClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;

@RequestMapping("/admin/product")
@RestController
public class FileUploadController {


//    @Autowired
//    MinioClient minioClient;
    @Autowired
    MinioService minioService;

    /**
     * 文件上传
     * 情况1：
     *         头像：<input name="header" type="file"/> <br/>
     *         生活照： <input name="shz" type="file"/><br/>
     *         私房照：<input name="sfz" type="file"/><br/>
     *         <input type="submit" value="上传"/>
     *      封装：
     *                          @RequestPart("header") MultipartFile file,
     *                          @RequestPart("shz") MultipartFile file2,
     *                          @RequestPart("sfz") MultipartFile file3
     * 情况2：
     *         头像：<input name="header" type="file"/> <br/>
     *         生活照： <input name="shz" type="file"/><br/>
     *         私房照：<input type="file"/><br/>
     *         所有不写name的文件项，name默认都叫 file
     *      封装：
     *                          @RequestPart("header") MultipartFile file,
     *                          @RequestPart("shz") MultipartFile file2,
     *                          @RequestPart("file") MultipartFile file3
     * 情况3：
     *         头像：<input type="file"/> <br/>
     *         生活照： <input type="file"/><br/>
     *         私房照：<input type="file"/><br/>
     *         <input type="submit" value="上传"/>
     *         三个name都叫file，
     *       封装：
     *          @RequestPart("file") MultipartFile[] file
     *  情况4：
     *         头像：<input name="header" type="file"/> <br/>
     *         生活照： <input name="shz" type="file"/><br/>
     *         私房照：<input name="sfz" type="file" multiple/><br/>
     *        封装：
     *          @RequestPart("header") MultipartFile file,
     *          @RequestPart("shz") MultipartFile file2,
     *          @RequestPart("sfz") MultipartFile[] file3
     *  情况5：
     *          用户名：<input type="text" name="username"/> <br/>
     *         年龄：<input type="text" name="age"/> <br/>
     *         头像：<input name="header" type="file"/> <br/>
     *         生活照： <input name="shz" type="file"/><br/>
     *         私房照：<input name="sfz" type="file" multiple/><br/>
     *         <input type="submit" value="上传"/>
     *         封装：
     *                          @RequestPart("header") MultipartFile file,
     *                          @RequestPart("shz") MultipartFile file2,
     *                          @RequestPart("sfz") MultipartFile[] file3,
     *                          @RequestParam("username") String username,
     *                          @RequestParam("age")String age
     *
     *      不写@RequestPart == @RequestPart("file")
     * @return
     */
    @PostMapping("/fileUpload")
    public Result upload(@RequestPart("file")MultipartFile file) {

        //上传给Minio，返回访问地址
        String path = null;
        try {
            path = minioService.uploadFile(file);
            return Result.ok(path);
        } catch (Exception e) {
            e.printStackTrace();
            return Result.fail(e.getMessage());
        }
    }
}
